home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / chrome / browser.jar / content / browser / preferences / phishEULA.js < prev    next >
Text File  |  2006-09-22  |  7KB  |  185 lines

  1. //@line 38 "/cygdrive/K/tinderbuild/src/flock/mozilla/browser/components/preferences/phishEULA.js"
  2.  
  3. /**
  4.  * gPhishDialog controls the user interface for displaying the privacy policy of
  5.  * an anti-phishing provider. 
  6.  * 
  7.  * The caller (gSecurityPane._userAgreedToPhishingEULA in main.js) invokes this
  8.  * dialog with a single argument - a reference to an object with .providerNum
  9.  * and .userAgreed properties.  This code displays the dialog for the provider
  10.  * as dictated by .providerNum and loads the policy.  When that load finishes,
  11.  * the OK button is enabled and the user can either accept or decline the
  12.  * agreement (a choice which is communicated by setting .userAgreed to true if
  13.  * the user did indeed agree).
  14.  */ 
  15. var gPhishDialog = {
  16.   /**
  17.    * The nsIWebProgress object associated with the privacy policy frame.
  18.    */
  19.   _webProgress: null,
  20.  
  21.   /**
  22.    * Initializes UI and starts the privacy policy loading.
  23.    */
  24.   init: function ()
  25.   {
  26.     const Cc = Components.classes, Ci = Components.interfaces;
  27.  
  28.     var providerNum = window.arguments[0].providerNum;
  29.  
  30.     var phishBefore = document.getElementById("phishBefore");
  31.  
  32.     var prefb = Cc["@mozilla.org/preferences-service;1"].
  33.                 getService(Ci.nsIPrefService).
  34.                 getBranch("browser.safebrowsing.provider.");
  35.  
  36.     // init before-frame and after-frame strings
  37.     // note that description only wraps when the string is the element's
  38.     // *content* and *not* when it's the value attribute
  39.     var providerName = prefb.getComplexValue(providerNum + ".name", Ci.nsISupportsString).data
  40.     var strings = document.getElementById("bundle_phish");
  41.     phishBefore.textContent = strings.getFormattedString("phishBeforeText", [providerName]);
  42.  
  43.     // guaranteed to be present, because only providers with privacy policies
  44.     // are displayed in the prefwindow
  45.     var formatter = Cc["@mozilla.org/toolkit/URLFormatterService;1"].
  46.                     getService(Ci.nsIURLFormatter);
  47.     var privacyURL = formatter.formatURLPref("browser.safebrowsing.provider." +
  48.                                              providerNum +
  49.                                              ".privacy.url",
  50.                                              null);
  51.     var fallbackURL = formatter.formatURLPref("browser.safebrowsing.provider." +
  52.                                               providerNum +
  53.                                               ".privacy.fallbackurl",
  54.                                               null);
  55.     this._progressListener._providerFallbackURL = fallbackURL;
  56.  
  57.     // add progress listener to enable OK, radios when page loads
  58.     var frame = document.getElementById("phishPolicyFrame");
  59.     var webProgress = frame.docShell
  60.                            .QueryInterface(Ci.nsIInterfaceRequestor)
  61.                            .getInterface(Ci.nsIWebProgress);
  62.     webProgress.addProgressListener(this._progressListener,
  63.                                     Ci.nsIWebProgress.NOTIFY_STATE_WINDOW);
  64.  
  65.     this._webProgress = webProgress; // for easy use later
  66.  
  67.     // start loading the privacyURL
  68.     const loadFlags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
  69.     frame.webNavigation.loadURI(privacyURL, loadFlags, null, null, null);
  70.   },
  71.  
  72.   /**
  73.    * The nsIWebProgressListener used to watch the status of the load of the
  74.    * privacy policy; enables the OK button when the load completes.
  75.    */
  76.   _progressListener:
  77.   {
  78.     /**
  79.      * First we try to load the provider url (possibly remote). If that fails
  80.      * to load, we try to load the provider fallback url (must be chrome://).
  81.      * If that also fails, we display an error message.
  82.      */
  83.     _providerLoadFailed: false,
  84.     _providerFallbackLoadFailed: false,
  85.     
  86.     _tryLoad: function(url) {
  87.       const Ci = Components.interfaces;
  88.       const loadFlags = Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
  89.       var frame = document.getElementById("phishPolicyFrame");
  90.       frame.webNavigation.loadURI(url, loadFlags, null, null, null);
  91.     },
  92.  
  93.     onStateChange: function (aWebProgress, aRequest, aStateFlags, aStatus)
  94.     {
  95.       // enable the OK button when the request completes
  96.       const Ci = Components.interfaces, Cr = Components.results;
  97.       if ((aStateFlags & Ci.nsIWebProgressListener.STATE_STOP) &&
  98.           (aStateFlags & Ci.nsIWebProgressListener.STATE_IS_WINDOW)) {
  99.         
  100.         if (Components.isSuccessCode(aRequest.status)) {
  101.           try {
  102.             aRequest.QueryInterface(Ci.nsIHttpChannel);
  103.           } catch (e) {
  104.             // Not an http request url (might be, e.g., chrome:) that loaded
  105.             // successfully, so we can exit.
  106.             return;
  107.           }
  108.  
  109.           // Any response other than 200 OK is an error.
  110.           if (200 == aRequest.responseStatus)
  111.             return;
  112.         }
  113.  
  114.         // Something failed
  115.         if (!this._providerLoadFailed) {
  116.           this._provderLoadFailed = true;
  117.           // Remote EULA failed to load; try loading provider fallback
  118.           this._tryLoad(this._providerFallbackURL);
  119.         } else if (!this._providerFallbackLoadFailed) {
  120.           // Provider fallback failed to load; try loading fallback EULA
  121.           this._providerFallbackLoadFailed = true;
  122.  
  123.           // fire off a load of the fallback policy
  124.           const fallbackURL = "chrome://browser/content/preferences/fallbackEULA.xhtml";
  125.           this._tryLoad(fallbackURL);
  126.  
  127.           // disable radios
  128.           document.getElementById("acceptOrDecline").disabled = true;
  129.         } else {
  130.           throw "Fallback policy failed to load -- what the hay!?!";
  131.         }
  132.       }
  133.     },
  134.     
  135.     onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress,
  136.                                aMaxSelfProgress, aCurTotalProgress,
  137.                                aMaxTotalProgress)
  138.     {
  139.     },
  140.  
  141.     onStatusChange : function(aWebProgress, aRequest, aStatus, aMessage)
  142.     {
  143.     },
  144.  
  145.     QueryInterface : function(aIID)
  146.     {
  147.       const Ci = Components.interfaces;
  148.       if (aIID.equals(Ci.nsIWebProgressListener) ||
  149.           aIID.equals(Ci.nsISupportsWeakReference) ||
  150.           aIID.equals(Ci.nsISupports))
  151.         return this;
  152.       throw Components.results.NS_NOINTERFACE;
  153.     }
  154.   },
  155.  
  156.   /**
  157.    * Signals that the user accepted the privacy policy by setting the window
  158.    * arguments appropriately.  Note that this does *not* change preferences;
  159.    * the opener of this dialog handles that.
  160.    */
  161.   accept: function ()
  162.   {
  163.     window.arguments[0].userAgreed = true;
  164.   },
  165.  
  166.   /**
  167.    * Clean up any XPCOM-JS cycles we may have created.
  168.    */
  169.   uninit: function ()
  170.   {
  171.     // overly aggressive, but better safe than sorry
  172.     this._webProgress.removeProgressListener(this._progressListener);
  173.     this._progressListener = this._webProgress = null;
  174.   },
  175.  
  176.   /**
  177.    * Called when the user changes the agree/disagree radio.
  178.    */
  179.   onchangeRadio: function ()
  180.   {
  181.     var radio = document.getElementById("acceptOrDecline");
  182.     document.documentElement.getButton("accept").disabled = (radio.value == "false");
  183.   }
  184. };
  185.